package com.zhejiangzhengyuan.municipal_common.utils.waterRuler;

import com.alibaba.fastjson.JSONObject;

public class DataUtils {

  private static final String Heartbeat = "55";

  /** 将传送过来的数据进行解析，包括异或运算 （第一次服务器端给客户端发） */
  public static String sendData(String ReceiveData) {

    if (ReceiveData == null || ReceiveData.length() <= 0) {
      System.out.println("数据为null或者为数据的长度小于0");
      return null;
    }

    if (ReceiveData.length() != 46) {
      System.out.println("数据长度不等于46");
      return "";
    }

    // 得到前字符串 (系统识别码  整帧长度 包序号 帧类型)
    String a1 = ReceiveData.substring(0, 16);
    // 得到原电话号码
    String s1 = ReceiveData.substring(16, 28);
    // 目的地址长度
    String a2 = ReceiveData.substring(28, 30);
    // 得到目的地址
    String s2 = ReceiveData.substring(30, 42);
    // 得到帧内容
    //        String s3 = ReceiveData.substring(42, 44);

    StringBuilder newStr = new StringBuilder();
    newStr.append(a1).append(s2).append(a2).append(s1).append(Heartbeat);

    // 进行BBC运算
    String bcc = BCCUtils.getBCC(newStr.toString());
    String sendStr = newStr.append(bcc).toString();
    System.out.println("最终返回的字符串" + sendStr);
    return sendStr;
  }

  /** 得到 前44位的数据 */
  public static String Get44itData(String str) {
    if (str == null || str.length() <= 0) {
      return null;
    }
    return str.substring(0, 46);
  }

  /** 得到88位的字符串 */
  public static String Get88BitData(String str) {
    if (str == null || str.length() <= 0) {
      return null;
    }
    char[] chars = str.toCharArray();
    if (chars[86] == '0' && chars[87] == '0') {
      return null;
    }
    return str.substring(0, 88);
  }

  /** 得到数据 */
  public static JSONObject GetListenerData(String str) {
    if (str == null || str.length() <= 0) {
      return null;
    }
    // 水位
    String s1 = str.substring(50, 58);
    // 信号质量
    String s2 = str.substring(58, 62);
    String s3 = str.substring(62, 66);
    // 电池电压
    String phone = str.substring(16, 27);

    // 转成10进制
    // 水位
    int parseInt1 = Integer.parseInt(s1, 16);
    // 信号质量
    int parseInt2 = Integer.parseInt(s2, 16);
    // 电池电压
    int parseInt3 = Integer.parseInt(s3, 16);
    // int parsePhone = Integer.parseInt(phone);

    JSONObject map = new JSONObject();
    map.put("WaterLevel", parseInt1);
    map.put("SignalQuality", parseInt2);
    map.put("BatteryVoltage", parseInt3);
    // 手机号码
    map.put("Phone", phone);
    return map;
  }
}
